<!DOCTYPE html>
<html lang="en">

<head>
    <title></title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

</head>


<body>

    <form onsubmit=" return post()">
        霸王条款：<input type="checkbox" name="agreement" message="必须接受霸王条款">
        学生认证：<input type="checkbox" name="student" message="必须接受学生认证">
        <input type="submit">
    </form>

</body>
<script>
    //map与set的区别
    //set 集合添加元素的方式
    // let set = new Set([1, 2, 3, 6, 5, 4, 6, 6]);
    // set.add(55);
    // console.log(set);
    //map结合添加东西的方式
    // let map = new Map([[{}, 'a'], [[], 'b'], [1, 'c']]);
    // map.set(2, 'd');//map添加方法 key value
    // map.delete(2);//删除方法 返回boolean 类型
    // map.clear();//清空map集合
    // console.log(map.keys());//获取 key键值对数组
    // console.log(map.values());//获取values 值数组
    // console.log(map.has(1));//判断在 map中 是否存在
    // console.log(map.entries().next());
    // console.log((map.entries()));//获取迭代对象 done: false 没有迭代完
    // console.log(map.values());//{Object => "a"}{Array(0) => "a"}
    //map 类型的遍历
    // for (const [key, value] of map) {
    //     //用解构方法结构出来map类型的 key value
    //     console.log(key, value);
    // }
    // map.forEach((value, key) => {
    //     //value 在前 key 在后
    //     console.log(key, value);
    // })

    //map类型转化为 array类型
    // let map = new Map([['1', 'a'], ['2', 'b'], ['3', 'c'], ['4', 'd']]);
    // let arr = [...map].filter((item, index) => {
    //     return item[0] > 2;
    // });
    // // map.set(arr)// 不能这样写  这是在原来的基础上增加 不能覆盖
    // map = new Map(arr);
    // console.log(map)
    //实例map 操作 同意协议
    //在from表单中 添加一个监听事件 onsubmit=" return post()" 在提交的适合触发post方法
    // map 集合的应用 把所有 input标签中 checkbox属性的input 拿到 并判断其是否选中如果未选中 这提示器message消息
    // let post = () => {
    //     let inputMap = new Map();
    //     let inputs = document.querySelectorAll('[ type="checkbox"]');
    //     [...inputs].forEach((item) => {
    //         //map key item为每一个input对象 value  message 和 status
    //         inputMap.set(item, {
    //             message: item.getAttribute("message"),
    //             status: item.checked
    //         });
    //     });
    //     return [...inputMap].every(([item, config]) => {
    //         config.status || alert(config.message);
    //         return config.status;
    //     });
    // };
    //weakMap 与map的区别在于
    /**
     * weakmap 的key必须的是引用类型 map key没做要求
     * weakmap与weakSet 都是弱引用类型 不能自己引用
     * weakMap 不能遍历 没有keys values 方法
     * WakeMap的键名对象不会增加引用计数器，如果一个对象不被引用了会自动删除。
     *  下例当hd删除时内存即清除，因为WeakMap是弱引用不会产生引用计数
     *  当垃圾回收时因为对象被删除，这时WakeMap也就没有记录了
     *
    */
    // let map = new WeakMap();
    // let hd = {};
    // map.set(hd, "hdcms");
    // hd = null;
    // console.log(map);//WeakMap {{…} => 'hdcms'}
    // setTimeout(() => {
    //     console.log(map);//WeakMap {}
    // }, 5000);

</script>

</html>